package com.iot08.common.entity.app;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author cwj
 * @description
 * @date 2025/1/4 13:49
 **/
@Data
@Document("wechat_notify_info")
public class WechatPayNotifyInfo implements Serializable {

    @Id
    private String id;
    //通知id
    private String notifyId;
    //通知创建时间
    private String notifyCreateTime;
    //通知摘要
    private String summary;
    //通知数据类型
    private String resourceType;
    //通知类型，支付成功通知的类型为TRANSACTION.SUCCESS
    private String eventType;
    //原始回调类型,加密前的对象类型，为transaction
    private String originalType;
    //加密算法类型,回调数据密文的加密算法类型，目前为AEAD_AES_256_GCM
    private String algorithm;
    //附加数据,参与解密的附加数据，该字段可能为空
    private String associatedData;
    //随机串,参与解密的随机串
    private String nonce;
    //数据密文,Base64编码后的回调数据密文，商户需Base64解码并使用APIV3密钥解密
    private String ciphertext;
    //微信支付订单号
    private String transactionId;
    //用户支付金额，用户实际支付金额
    private BigDecimal payerTotal;
    //支付总金额/退款总金额
    private BigDecimal total;
    //退款金额
    private BigDecimal refund;
    //用户退款金额
    private BigDecimal payerRefund;
    //货币类型
    private String currency;
    //支付货币类型
    private String payerCorrency;
    //商户订单号
    private String outTradeNo;
    //微信退款单号
    private String refundNo;
    //商户退款单号
    private String outRefundNo;
    //交易状态描述
    private String tradeStateDesc;
    //交易类型,APP支付、H5支付等
    private String tradeType;
    //交易状态,SUCCESS：支付成功，REFUND：转入退款，NOTPAY：未支付，CLOSED：已关闭，REVOKED：已撤销（仅付款码支付会返回），USERPAYING：用户支付中（仅付款码支付会返回），PAYERROR：支付失败（仅付款码支付会返回）
    //退款状态,SUCCESS：退款成功，CLOSED：退款关闭，PROCESSING：退款处理中，ABNORMAL：退款异常
    private String tradeStatus;
    //退款入账账户
    private String userReceivedAccount;
    //商户mchid
    private String mchid;
    //商户appid
    private String appid;
    //银行类型
    private String bankType;
    //支付完成时间
    private String successTime;

    private Date createDate;

    private Date updateDate;
}
